/**
 * Point
 *
 */
if(typeof (module) !="undefined"){
    module.exports = Effect;


    var FColorBase = require('../color/FColorBase');
}


// 屏幕坐标中的点，用像素为单位
function Effect()
{
    //type:效果的类型，0无，1填充，2描边，3滤镜，4变形
    this.t=Effect.prototype.F_EFFECT_TYPE_NONE;
    // value:t对应的值，
    // 		t=F_EFFECT_TYPE_FILL、F_EFFECT_TYPE_STROKE时表示颜色，
    //		t=F_EFFECT_TYPE_FILTER时表示图像滤镜效果，
    //		t=F_EFFECT_TYPE_DEFORMATION时表示变形效果
    //		t=F_EFFECT_TYPE_LINE_CAP时表示line cap
    //		t=F_EFFECT_TYPE_LINE_JOIN时表示line join
    this.v=0;
    // value2:t对应的第二个值，
    //		t=F_EFFECT_TYPE_STROKE时表示描边的宽度，
    //		t=F_EFFECT_TYPE_LINE_JOIN且v=LINE_JOIN_MITER时表示miterLimit
    this.v2=0;
}

Effect.prototype.EFFECT_VALUE_EMPTY = -1;// 空是effect的某个value为空，例如填充色为空，描边色为空
Effect.prototype.EFFECT_VALUE_IGNORE = -2;// 表示要忽略该参数

// line cap type： 'butt'，'round'，'square'
Effect.prototype.LINE_CAP_BUTT	= 1;
Effect.prototype.LINE_CAP_ROUND	= 2;
Effect.prototype.LINE_CAP_SQUARE	= 3;

// line join type：'miter'，'round'，'bevel'
Effect.prototype.LINE_JOIN_MITER	= 1;
Effect.prototype.LINE_JOIN_ROUND	= 2;
Effect.prototype.LINE_JOIN_BEVEL	= 3;


// 图像滤镜
Effect.prototype.IMAGE_FILTER_NONE =  0;// 无
Effect.prototype.IMAGE_FILTER_OLD =  1;//老照片  "old":
Effect.prototype.IMAGE_FILTER_BLACKWHITE= 2 ;//黑白 "blackWhite":
Effect.prototype.IMAGE_FILTER_INCREASING= 3;//增强 "incresing":
Effect.prototype.IMAGE_FILTER_WHITENING= 4;//美化 "whitening":
Effect.prototype.IMAGE_FILTER_INVERSE= 5;//反色 "inverse":
Effect.prototype.IMAGE_FILTER_PAPERBW= 6;//黑白报纸  "paperBW":
Effect.prototype.IMAGE_FILTER_CONTRAST= 7;//对比 "cccc":


Effect.prototype.F_EFFECT_TYPE_NONE         = -1;// 空是effect的某个value为空，例如填充色为空，描边色为空
Effect.prototype.F_EFFECT_TYPE_FILL         = 1;			// 填充
Effect.prototype.F_EFFECT_TYPE_STROKE       =     2;		// 描边
Effect.prototype.F_EFFECT_TYPE_FILTER       =     3;		// 图像滤镜
Effect.prototype.F_EFFECT_TYPE_DEFORMATION  =     4;// 变形，如扭曲
Effect.prototype.F_EFFECT_TYPE_STYLIZE   	=     5;// 图形图形风格化，如投影、发光
Effect.prototype.F_EFFECT_TYPE_LINE_CAP 		=     10;// line cap
Effect.prototype.F_EFFECT_TYPE_LINE_JOIN 		=     11;// line join


// 转成json字符串
Effect.prototype.toJson = function(){
    var ret = '{';
    ret +=('"t":'+this.t);


    switch(this.t){
        case Effect.prototype.F_EFFECT_TYPE_FILL:
        case Effect.prototype.F_EFFECT_TYPE_STYLIZE:
            ret +=',';
            ret +=('"v":'+this.v.toJson());
            break;
        case Effect.prototype.F_EFFECT_TYPE_STROKE:
            ret +=',';
            ret +=('"v":'+this.v.toJson());
            ret +=',';
            ret +=('"v2":'+this.v2);
            break;
        case Effect.prototype.F_EFFECT_TYPE_LINE_JOIN:
            ret +=',';
            ret +=('"v":'+this.v);
            if(this.v == Effect.prototype.LINE_JOIN_MITER){
                ret +=',';
                ret +=('"v2":'+this.v2);
            }
            break;
        default:
            ret +=',';
            ret +=('"v":'+this.v);
            break;
    }

    ret+='}';
    return ret;
}
// 从json对象中解析出PointPath
Effect.prototype.fromJson = function(jsonObj, versionId){
    this.t=jsonObj.t;

    switch(this.t){
        case Effect.prototype.F_EFFECT_TYPE_FILL:
        case Effect.prototype.F_EFFECT_TYPE_STYLIZE:
            if(jsonObj.v != Effect.prototype.F_EFFECT_TYPE_NONE)
                this.v = FColorBase.prototype.fromUnknownJson(jsonObj.v, versionId);
            break;
        case Effect.prototype.F_EFFECT_TYPE_STROKE:
            if(jsonObj.v != Effect.prototype.F_EFFECT_TYPE_NONE)
                this.v = FColorBase.prototype.fromUnknownJson(jsonObj.v, versionId);
            this.v2 =jsonObj.v2;
            break;
        case Effect.prototype.F_EFFECT_TYPE_LINE_JOIN:
            this.v = jsonObj.v;
            if(jsonObj.v == Effect.prototype.LINE_JOIN_MITER){
                this.v2 = jsonObj.v2;
            }
            break;
        default:
            this.v = jsonObj.v;
            break;
    }
}

// 取得某种效果的value
// 参数：
//		type：类型
//		v2：为true表示取得effect中v2的值，false取v1的值
Effect.prototype.getEffectFromArray = function(ef, type,v2){
    // effect 从基类PrintObj的ef属性中取得
    //return _effect;
    var ret = Effect.F_EFFECT_TYPE_NONE;// 0 表示无值
    if(ef!=null && ef.length>0){
        for(var i=0;i<ef.length;i++){
            var effect = ef[i];
            if(effect.t == type){
                if(!v2)
                    ret = effect.v;
                else
                    ret = effect.v2;
                break;
            }
        }
    }

    return ret;

}

// 设置effect到ef数组中
// 参数：
//		type：类型
//		value：effect中的value1的值，如果传入EFFECT_VALUE_IGNORE则略过
//		value2：effect中的value2的值，如果传入EFFECT_VALUE_IGNORE则略过
Effect.prototype.setEffectToArray = function(ef,type,value,value2){
    if(!value)       value = Effect.prototype.EFFECT_VALUE_IGNORE;
    if(!value2)       value2 = Effect.prototype.EFFECT_VALUE_IGNORE;


    // effect 设置到基类PrintObj的ef属性中
    //_effect = value;
    if(ef==null)
    ef = [];

    // 找ef中查找effect，修改值
    var bFindFilter = false;
    for(var i=0;i<ef.length;i++){
        var effect = ef[i];
        if(effect.t == type){
            if(value!=Effect.EFFECT_VALUE_IGNORE)
                effect.v = value; // 设置到图片滤镜
            if(value2!=Effect.EFFECT_VALUE_IGNORE)
                effect.v2 = value2;
            bFindFilter = true;
            break;
        }
    }
    // 如果找不到effect，就新建
    if(!bFindFilter){
        var effect = new Effect();
        effect.t = type;
        if(value!=Effect.EFFECT_VALUE_IGNORE)
            effect.v = value;
        if(value2!=Effect.EFFECT_VALUE_IGNORE)
            effect.v2 = value2;
        ef.push(effect);
    }

}

// 取得line cap对应PDFKit中的名称
// 参数：
//		lineCap：以下三者之一：Effect.prototype.LINE_CAP_BUTT、Effect.prototype.LINE_CAP_ROUND、Effect.prototype.LINE_CAP_SQUARE
Effect.prototype.getPDFKitLineCapName = function(lineCap){
    return (Effect.prototype.LINE_CAP_BUTT	== lineCap)?'butt':(
        (Effect.prototype.LINE_CAP_ROUND	== lineCap)?'round':'square'
        );
}

// 取得line join对应PDFKit中的名称
// 参数：
//		lineJoin：以下三者之一：Effect.prototype.LINE_JOIN_MITER、Effect.prototype.LINE_JOIN_ROUND、Effect.prototype.LINE_JOIN_BEVEL
Effect.prototype.getPDFKitLineJoinName = function(lineJoin){
    return (Effect.prototype.LINE_JOIN_MITER	== lineJoin)?'miter':(
        (Effect.prototype.LINE_JOIN_ROUND== lineJoin)?'round':'bevel'
        );
}

